package com.rendevous.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Date;
import java.util.Map;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

import com.rendevous.bean.Task;

public class JSONParser extends org.json.simple.parser.JSONParser {

	public Task Json2Task(JSONObject JSONtask) {
		Task task = new Task();

		task.setId((Long) JSONtask.get(Constants.KEY_ID));
		task.setDone((Boolean) JSONtask.get(Constants.KEY_ISDONE));
		task.setContent((String) JSONtask.get(Constants.KEY_CONTENT));
		task.setTagList((List<String>) JSONtask.get(Constants.KEY_TAGLIST));
		task.setPriority((String) JSONtask.get(Constants.KEY_PRIORITY));
		task.setStartTime((Date) JSONtask.get(Constants.KEY_START_TIME));
		// task.setEndTime((Date) JSONtask.get(Constants.KEY_END_TIME));

		return task;
	}

	public JSONObject Task2Json(Task task) {
		JSONObject JSONtask = new JSONObject();

		JSONtask.put(Constants.KEY_ID, task.getId());
		JSONtask.put(Constants.KEY_ISDONE, task.isDone());
		JSONtask.put(Constants.KEY_CONTENT, task.getContent());
		JSONtask.put(Constants.KEY_TAGLIST, task.getTagList());
		JSONtask.put(Constants.KEY_PRIORITY, task.getPriority());
		JSONtask.put(Constants.KEY_START_TIME, task.getStartTime());
		// JSONtask.put(Constants.KEY_END_TIME, task.getEndTime());

		return JSONtask;
	}

	public List<Task> JSONArray2List(JSONArray jsonArray) {
		List<Task> result = new ArrayList<Task>();
		Iterator<Object> it = jsonArray.iterator();
		while (it.hasNext()) {
			result.add(Json2Task((JSONObject) it.next()));
		}
		return result;
	}

	public Map<Long, JSONObject> JSONArray2Map(JSONArray jsonArray) {
		Map<Long, JSONObject> result = new HashMap<Long, JSONObject>();
		Iterator<Object> it = jsonArray.iterator();
		while (it.hasNext()) {
			JSONObject json = (JSONObject) it.next();
			result.put((Long) json.get(Constants.KEY_ID), json);
		}
		return result;
	}
}
